interface DebounceOptions {
  leading?: boolean // 是否立即执行（默认 false）
  trailing?: boolean // 是否延迟执行（默认 true）
}

/**
 * 进阶防抖函数（TS 版本，支持立即执行）
 * @param func 需要防抖的目标函数
 * @param delay 延迟时间（毫秒）
 * @param options 配置项（leading/trailing）
 * @returns 防抖后的函数（类型与原函数一致）
 */
const debounceAdvanced = (
  func: Function,
  delay = 300,
  options: DebounceOptions = {}
) => {
  let timer: ReturnType<typeof setTimeout> | null = null
  let isExecuted = false // 标记是否已立即执行
  const { leading = false, trailing = true } = options

    console.log(timer)

  return () => {
    // 清除上一次未执行的定时器
    if (timer) clearTimeout(timer)

    // 立即执行逻辑（leading: true）
    if (leading && !isExecuted) {
      func && func()
      isExecuted = true
    }

    // 延迟执行逻辑（trailing: true）
    if (trailing) {
      timer = setTimeout(() => {
        // 仅当未立即执行时触发（或 leading 为 false）
        if (!leading || !isExecuted) {
          func && func()
        }
        isExecuted = false // 重置标记
      }, delay)
    }
  }
}

export default debounceAdvanced